package inventario;

import conexion.CConexion;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import utilitario.CFecha;

public class CInvReq100 extends CConexion {

    private CFecha fechaSistema = null;
    private String compania = null;
    private String usuarioActual = null;
    private String fechaActual = null;
    private String numeroDocumento = null;
    private String fechaRequisicion = null;
    private String solicitado = null;
    private String comentario = null;
    private String autorizado = null;
    private String estado = null;
    private String[][] detalle = null;
    private int filas = 0;
    private int columnas = 0;

    public CInvReq100() {
        super();
        fechaSistema = new CFecha();
        compania = login.getCompaniaActual();
        usuarioActual = login.getUsuarioLogin();
        fechaActual = fechaSistema.getFechaCompleta();
        columnas = 11;
    }

    public void setFilas(int filas) {
        this.filas = filas;
    }

    public void setColumnas(int columnas) {
        this.columnas = columnas;
    }

    public ResultSet buscar(String numreq, String soli, String fecha) throws SQLException {
        String sqlBuscar = "SELECT req100nodo, req100soli from invreq100 where req100nocia = '" + compania + "'";
        if (!numreq.isEmpty()) {
            sqlBuscar += " and req100nodo = '" + numreq + "'";
        }
        if (!soli.isEmpty()) {
            sqlBuscar += " and req100soli like '%" + soli + "%'";
        }
        if (!fecha.isEmpty()) {
            sqlBuscar += " and req100fech = '" + fecha + "'";
        }
        sqlBuscar += " ORDER BY req100nodo";
        Statement stncBuscar = this.getConexion().createStatement();
        ResultSet rsBuscar = stncBuscar.executeQuery(sqlBuscar);
        return rsBuscar;
    }

    public ResultSet buscarRequisicionesPendientes(String numReq, String soli, String fech) throws SQLException {
        String sqlBuscarPendientes = "select req100nodo, req100soli from invreq100 where req100esta = 'P'";
        if (!numReq.isEmpty()) {
            sqlBuscarPendientes += " and req100nodo='" + numReq + "'";
        }
        if (!soli.isEmpty()) {
            sqlBuscarPendientes += " and req100soli like '%" + soli + "%'";
        }
        if (!fech.isEmpty()) {
            sqlBuscarPendientes += " and req100fech='" + fech + "'";
        }
        Statement stncBuscarPendientes = this.getConexion().createStatement();
        ResultSet rsBuscarPendientes = stncBuscarPendientes.executeQuery(sqlBuscarPendientes);
        return rsBuscarPendientes;
    }

    public ResultSet buscarRequisicionesAprobadas(String numReq, String soli, String fech) throws SQLException {
        String sqlBuscarAprobadas = "select req100nodo, req100soli from invreq100 where req100esta = 'A'";
        if (!numReq.isEmpty()) {
            sqlBuscarAprobadas += " and req100nodo='" + numReq + "'";
        }
        if (!soli.isEmpty()) {
            sqlBuscarAprobadas += " and req100soli like '%" + soli + "%'";
        }
        if (!fech.isEmpty()) {
            sqlBuscarAprobadas += " and req100fech='" + fech + "'";
        }
        Statement stncBuscarAprobadas = this.getConexion().createStatement();
        ResultSet rsBuscarAprobadas = stncBuscarAprobadas.executeQuery(sqlBuscarAprobadas);
        return rsBuscarAprobadas;
    }

    public ResultSet buscarCabecera(String numeroRequisicion) throws SQLException {
        String sqlBuscaCabecera = "select * from invreq100 where req100nodo = '" + numeroRequisicion + "'";
        Statement stncBuscarCabecera = this.getConexion().createStatement();
        ResultSet rsBuscarCabecera = stncBuscarCabecera.executeQuery(sqlBuscaCabecera);
        return rsBuscarCabecera;
    }

    public ResultSet buscarDetalle(String numeroRequisicion) throws SQLException {
        String sqlBuscarDetalle = "select req101nose, req101cdgo, req101desc, req101cant, sum(exi100sact) as total from invreq101, invexi100 where exi100cdgo=req101cdgo and req101nodo = '" + numeroRequisicion + "'" + "group by exi100cdgo order by req101nose";
        Statement stncBuscarDetalle = this.getConexion().createStatement();
        ResultSet rsBuscarDetalle = stncBuscarDetalle.executeQuery(sqlBuscarDetalle);
        return rsBuscarDetalle;
    }

    public ResultSet buscarDetalleCruzado(String numeroRequisicion) throws SQLException {
        String sql = "SELECT req101nose, req101cdgo, req101desc, req101cant, req101esta, exi100sact, exi100lote, exi100feca FROM invreq101, invexi100 WHERE exi100cdgo=req101cdgo and req101esta = 'A' and req101nodo = '" + numeroRequisicion + "' and exi100sact <> 0 order by req101nose, exi100feca";
        Statement stnc = this.getConexion().createStatement();
        return stnc.executeQuery(sql);
    }

    public void setCabecera(String nodo, String soli, String come, String esta, String auto) {
        this.numeroDocumento = nodo;
        this.fechaRequisicion = fechaActual;
        this.solicitado = soli;
        this.comentario = come;
        this.estado = esta;
        this.autorizado = auto;
    }

    public void guardarCabecera() throws SQLException {
        String sqlGuardaCabecera = "insert into invreq100 values ('" + compania + "'," + numeroDocumento + ",'" + fechaRequisicion + "','" + solicitado + "','" + autorizado + "','" + comentario + "','" + estado + "','" + usuarioActual + "','" + fechaActual + "','" + usuarioActual + "','" + fechaActual + "')";
        Statement stncGuardaCabecera = this.getConexion().createStatement();
        stncGuardaCabecera.execute(sqlGuardaCabecera);
        stncGuardaCabecera.close();
    }

    public void setDetalle(String[][] detalle, int filas) {
        this.filas = filas;
        this.detalle = new String[filas][columnas];
        for (int i = 0; i < filas; i++) {
            this.detalle[i][0] = this.compania;
            this.detalle[i][1] = this.numeroDocumento;
            this.detalle[i][2] = "" + (i + 1);
            this.detalle[i][3] = detalle[i][1];//cdgo
            this.detalle[i][4] = detalle[i][2];//desc
            this.detalle[i][5] = detalle[i][4]; //cant
            this.detalle[i][6] = this.estado;
            this.detalle[i][7] = this.usuarioActual;
            this.detalle[i][8] = this.fechaActual;
            this.detalle[i][9] = this.usuarioActual;
            this.detalle[i][10] = this.fechaActual;
        }
    }

    public void guardarDetalle() throws SQLException {
        for (int i = 0; i < filas; i++) {
            Statement stncGuardarDetalle = this.getConexion().createStatement();
            String sqlGuardarDetalle = "insert into invreq101 values('" + detalle[i][0] + "','" + detalle[i][1] + "','" + detalle[i][2] + "','" + detalle[i][3] + "','" + detalle[i][4] + "','" + detalle[i][5] + "','" + detalle[i][6] + "','" + detalle[i][7] + "','" + detalle[i][8] + "','" + detalle[i][9] + "','" + detalle[i][10] + "')";
            stncGuardarDetalle.execute(sqlGuardarDetalle);
            stncGuardarDetalle.close();
        }
    }

    public void actualizaCabecera(String nodo, String comentario) throws SQLException {
        String sqlActualizaCabecera = "update invreq100 set req100come='" + comentario + "', req100lomo = '" + usuarioActual + "', req100femo = '" + fechaActual + "' where req100nocia = '" + compania + "' and req100nodo= '" + nodo + "'";
        Statement stncActualizaCabecera = this.getConexion().createStatement();
        stncActualizaCabecera.executeUpdate(sqlActualizaCabecera);
        stncActualizaCabecera.close();
    }

    public void actualizarDetalle(String nodo, String[][] detalle, int filas) throws SQLException {
        String sqlSacaDetalle = "select req101load, req101fead from invreq101 where req101nocia='" + compania + "' and req101nodo='" + nodo + "'";
        Statement stncSacaDetalle = this.getConexion().createStatement();
        ResultSet rsSacaDetalle = stncSacaDetalle.executeQuery(sqlSacaDetalle);
        rsSacaDetalle.next();
        String usuarioCreacion = rsSacaDetalle.getString("req101load");
        String fechaCreacion = rsSacaDetalle.getString("req101fead");
        rsSacaDetalle.close();
        stncSacaDetalle.close();
        String sqlEliminarDetalle = "delete from invreq101 where req101nocia='" + compania + "' and req101nodo='" + nodo + "'";
        Statement stncEliminarDetalle = this.getConexion().createStatement();
        stncEliminarDetalle.execute(sqlEliminarDetalle);
        stncEliminarDetalle.close();
        this.setDetalle(detalle, filas);
        this.guardarDetalle();
        String sqlActualizarDetalle = "update invreq101 set req101load='" + usuarioCreacion + "', req101fead = '" + fechaCreacion + "' where req101nocia = '" + compania + "' and req101nodo= '" + nodo + "'";
        Statement stncActualizaDetalle = this.getConexion().createStatement();
        stncActualizaDetalle.executeUpdate(sqlActualizarDetalle);
        stncActualizaDetalle.close();
    }

    public void aprobarRequisicion(int numfila, int cant, int fila, String nodo, String aprobado) throws SQLException {
        String sqlAprobarRequisicion = "update invreq101 set req101nose = '" + numfila + "', req101lomo = '" + usuarioActual + "', req101femo = '" + fechaActual + "', req101esta = '" + aprobado + "', req101cant = " + cant + " where req101nose = " + fila + " and req101nodo =  '" + nodo + "'";
        Statement stncAprobarRequisicion = this.getConexion().createStatement();
        stncAprobarRequisicion.executeUpdate(sqlAprobarRequisicion);
        stncAprobarRequisicion.close();
    }

    public void despacharRequisicion(String nodo, String nose) throws SQLException {
        String sqlDespacharRequisicion = "update invreq101 set req101esta = 'D' where req101nocia = '" + compania + "' and req101nodo = '" + nodo + "' and req101nose = '" + nose + "'";
        Statement stncDespacharRequisicion = this.getConexion().createStatement();
        stncDespacharRequisicion.executeUpdate(sqlDespacharRequisicion);
        stncDespacharRequisicion.close();
    }

    public void actualizarCabeceraAprobada(String nodo) throws SQLException {
        String sqlTodos = "select count(req101esta) from invreq101 where req101nocia='" + compania + "' and req101nodo='" + nodo + "'";
        Statement stncTodos = this.getConexion().createStatement();
        ResultSet rsTodos = stncTodos.executeQuery(sqlTodos);
        rsTodos.next();
        String todos = rsTodos.getString(1);
        rsTodos.close();
        stncTodos.close();
        String sqlAprobados = "select count(req101esta) from invreq101 where req101nocia='" + compania + "' and req101nodo='" + nodo + "' and req101esta='A'";
        Statement stncAprobados = this.getConexion().createStatement();
        ResultSet rsAprobados = stncAprobados.executeQuery(sqlAprobados);
        rsAprobados.next();
        String aprobados = rsAprobados.getString(1);
        rsAprobados.close();
        stncAprobados.close();
        String sqlDenegados = "select count(req101esta) from invreq101 where req101nocia='" + compania + "' and req101nodo='" + nodo + "' and req101esta='D'";
        Statement stncDenegados = this.getConexion().createStatement();
        ResultSet rsDenegados = stncDenegados.executeQuery(sqlDenegados);
        rsDenegados.next();
        String denegados = rsDenegados.getString(1);
        rsDenegados.close();
        stncDenegados.close();
        Statement stnc = this.getConexion().createStatement();
        if (aprobados.equalsIgnoreCase(todos)) {
            stnc.executeUpdate("update invreq100 set req100esta = 'A', req100lomo = '" + usuarioActual + "', req100femo = '" + fechaActual + "' where req100nocia = '" + compania + "' and req100nodo= '" + nodo + "'");
        } else if (denegados.equalsIgnoreCase(todos)) {
            stnc.executeUpdate("update invreq100 set req100esta = 'D', req100lomo = '" + usuarioActual + "', req100femo = '" + fechaActual + "' where req100nocia = '" + compania + "' and req100nodo= '" + nodo + "'");
        } else {
            stnc.executeUpdate("update invreq100 set req100esta = 'P', req100lomo = '" + usuarioActual + "', req100femo = '" + fechaActual + "' where req100nocia = '" + compania + "' and req100nodo= '" + nodo + "'");
        }
        stnc.close();
    }
}
